{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "049d3bf9-a537-41d0-902f-35f4e79c94ba",
   "metadata": {},
   "source": [
    "# ModelCheckpoint Callback"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e80fef60",
   "metadata": {},
   "outputs": [],
   "source": [
    "import lightning as L\n",
    "import torch\n",
    "from lightning.pytorch.loggers import CSVLogger\n",
    "\n",
    "from shared_utilities import CustomDataModule, LightningModel"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "4dc80397-26f2-41de-80fc-572e240fca9a",
   "metadata": {},
   "outputs": [],
   "source": [
    "class PyTorchMLP(torch.nn.Module):\n",
    "    def __init__(self, num_features, num_classes):\n",
    "        super().__init__()\n",
    "\n",
    "        self.all_layers = torch.nn.Sequential(\n",
    "            # 1st hidden layer\n",
    "            torch.nn.Linear(num_features, 100),\n",
    "            torch.nn.ReLU(),\n",
    "            # 2nd hidden layer\n",
    "            torch.nn.Linear(100, 50),\n",
    "            torch.nn.ReLU(),\n",
    "            # output layer\n",
    "            torch.nn.Linear(50, num_classes),\n",
    "        )\n",
    "\n",
    "    def forward(self, x):\n",
    "        x = torch.flatten(x, start_dim=1)\n",
    "        logits = self.all_layers(x)\n",
    "        return logits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "aa7bcf14-8046-4213-accf-544b67e74883",
   "metadata": {},
   "outputs": [],
   "source": [
    "torch.manual_seed(123)\n",
    "\n",
    "dm = CustomDataModule()\n",
    "\n",
    "pytorch_model = PyTorchMLP(num_features=100, num_classes=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "6180d181-263d-4495-b03c-1c8fde4a42b1",
   "metadata": {},
   "outputs": [],
   "source": [
    "from lightning.pytorch.callbacks import ModelCheckpoint\n",
    "\n",
    "callbacks = [\n",
    "    ModelCheckpoint(save_top_k=1, mode=\"max\", monitor=\"val_acc\", save_last=True)\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "eaf13b54",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "GPU available: True (mps), used: False\n",
      "TPU available: False, using: 0 TPU cores\n",
      "IPU available: False, using: 0 IPUs\n",
      "HPU available: False, using: 0 HPUs\n",
      "/Users/sebastian/miniforge3/envs/lightning2/lib/python3.9/site-packages/lightning/pytorch/trainer/setup.py:201: UserWarning: MPS available but not used. Set `accelerator` and `devices` using `Trainer(accelerator='mps', devices=1)`.\n",
      "  rank_zero_warn(\n",
      "Missing logger folder: logs/my-model\n",
      "\n",
      "  | Name      | Type               | Params\n",
      "-------------------------------------------------\n",
      "0 | model     | PyTorchMLP         | 15.3 K\n",
      "1 | train_acc | MulticlassAccuracy | 0     \n",
      "2 | val_acc   | MulticlassAccuracy | 0     \n",
      "3 | test_acc  | MulticlassAccuracy | 0     \n",
      "-------------------------------------------------\n",
      "15.3 K    Trainable params\n",
      "0         Non-trainable params\n",
      "15.3 K    Total params\n",
      "0.061     Total estimated model params size (MB)\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Sanity Checking: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/sebastian/miniforge3/envs/lightning2/lib/python3.9/site-packages/lightning/pytorch/trainer/connectors/data_connector.py:224: PossibleUserWarning: The dataloader, val_dataloader 0, does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` (try 8 which is the number of cpus on this machine) in the `DataLoader` init to improve performance.\n",
      "  rank_zero_warn(\n",
      "/Users/sebastian/miniforge3/envs/lightning2/lib/python3.9/site-packages/lightning/pytorch/trainer/connectors/data_connector.py:224: PossibleUserWarning: The dataloader, train_dataloader, does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` (try 8 which is the number of cpus on this machine) in the `DataLoader` init to improve performance.\n",
      "  rank_zero_warn(\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ac40d18fbafa4255b3613926c68f5a6c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Training: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validation: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validation: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validation: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validation: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validation: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validation: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validation: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validation: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validation: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validation: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "`Trainer.fit` stopped: `max_epochs=10` reached.\n"
     ]
    }
   ],
   "source": [
    "lightning_model = LightningModel(model=pytorch_model, learning_rate=0.05)\n",
    "\n",
    "trainer = L.Trainer(\n",
    "    callbacks=callbacks,  # New!!!\n",
    "    max_epochs=10,\n",
    "    accelerator=\"cpu\",\n",
    "    devices=\"auto\",\n",
    "    logger=CSVLogger(save_dir=\"logs/\", name=\"my-model\"),\n",
    "    deterministic=True,\n",
    ")\n",
    "\n",
    "trainer.fit(model=lightning_model, datamodule=dm)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "897d5146",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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WWVWamoq48eP5/vvvyc5OZmqVasyYMAAJkyYgKenp7PLK5EUkERERETy0BgkERERkTwUkERERETyUEASERERyUMBSURERCQPBSQRERGRPBSQRERERPJQQBIRERHJQwFJREREJA8FJBGRQmIymfjvf//r7DJEpBAoIIlIqTB06FBMJlO+W/fu3Z1dmoiUQFqsVkRKje7du/Pxxx/n2ubl5eWkakSkJFMPkoiUGl5eXoSEhOS6VapUCTBOf82cOZMePXrg4+ND7dq1+eabb3K9ftu2bdx11134+PhQuXJlhg8fzvnz53PtM2fOHBo3boyXlxehoaGMGjUq1/MnT57k3nvvxdfXl3r16vHjjz8W7YcWkSKhgCQiZcb48ePp27cvf/zxB4MGDaJ///7s2rULgLS0NLp160alSpXYsGEDCxYsYOnSpbkC0MyZM3nqqacYPnw427Zt48cff6Ru3bq53mPy5Mk8+OCDbN26lZ49ezJo0CBOnz5drJ9TRAqBXUSkFBgyZIjdzc3NXq5cuVy3KVOm2O12ux2wjxw5MtdroqKi7E888YTdbrfbP/zwQ3ulSpXs58+fdzy/cOFCu9lsticmJtrtdru9atWq9pdffvmqNQD2cePGOR6fP3/eDth//vnnQvucIlI8NAZJREqNO++8k5kzZ+baFhAQ4Ljftm3bXM+1bduWLVu2ALBr1y6aNWtGuXLlHM+3b98em81GfHw8JpOJY8eO0alTp2vW0LRpU8f9cuXK4e/vT3Jy8s1+JBFxEgUkESk1ypUrl++UV2Hx8fEp0H4eHh65HptMJmw2W1GUJCJFSGOQRKTMWLduXb7HDRs2BKBhw4b88ccfpKWlOZ5fvXo1ZrOZBg0a4OfnR3h4OLGxscVas4g4h3qQRKTUyMzMJDExMdc2d3d3AgMDAViwYAGtW7emQ4cOfPnll8TFxTF79mwABg0axMSJExkyZAiTJk3ixIkTPP300zz88MMEBwcDMGnSJEaOHElQUBA9evQgNTWV1atX8/TTTxfvBxWRIqeAJCKlxuLFiwkNDc21rUGDBuzevRswrjCbN28eTz75JKGhoXz11Vc0atQIAF9fX3755ReeeeYZ2rRpg6+vL3379mXatGmOYw0ZMoSMjAzeeecdnn/+eQIDA7n//vuL7wOKSLEx2e12u7OLEBEpaiaTie+//54+ffo4uxQRKQE0BklEREQkDwUkERERkTw0BklEygSNJhCRG6EeJBEREZE8FJBERERE8lBAEhEREclDAUlEREQkDwUkERERkTwUkERERETyUEASERERyUMBSURERCSP/wccEYBN3ww0LwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "\n",
    "metrics = pd.read_csv(f\"{trainer.logger.log_dir}/metrics.csv\")\n",
    "\n",
    "aggreg_metrics = []\n",
    "agg_col = \"epoch\"\n",
    "for i, dfg in metrics.groupby(agg_col):\n",
    "    agg = dict(dfg.mean())\n",
    "    agg[agg_col] = i\n",
    "    aggreg_metrics.append(agg)\n",
    "\n",
    "df_metrics = pd.DataFrame(aggreg_metrics)\n",
    "df_metrics[[\"train_loss\", \"val_loss\"]].plot(\n",
    "    grid=True, legend=True, xlabel=\"Epoch\", ylabel=\"Loss\"\n",
    ")\n",
    "df_metrics[[\"train_acc\", \"val_acc\"]].plot(\n",
    "    grid=True, legend=True, xlabel=\"Epoch\", ylabel=\"ACC\"\n",
    ")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8c92115b-7012-4f8f-94ba-0b19c972323a",
   "metadata": {},
   "source": [
    "# Use the Best Checkpoint"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "c9f2cacd-674d-401e-adc5-e697547f3c07",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/sebastian/miniforge3/envs/lightning2/lib/python3.9/site-packages/lightning/pytorch/trainer/connectors/data_connector.py:224: PossibleUserWarning: The dataloader, test_dataloader 0, does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` (try 8 which is the number of cpus on this machine) in the `DataLoader` init to improve performance.\n",
      "  rank_zero_warn(\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0f27a9c3fed948239356c33cee24cea1",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Testing: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃<span style=\"font-weight: bold\">        Test metric        </span>┃<span style=\"font-weight: bold\">       DataLoader 0        </span>┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│<span style=\"color: #008080; text-decoration-color: #008080\">         test_acc          </span>│<span style=\"color: #800080; text-decoration-color: #800080\">    0.8557500243186951     </span>│\n",
       "└───────────────────────────┴───────────────────────────┘\n",
       "</pre>\n"
      ],
      "text/plain": [
       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃\u001b[1m \u001b[0m\u001b[1m       Test metric       \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m      DataLoader 0       \u001b[0m\u001b[1m \u001b[0m┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│\u001b[36m \u001b[0m\u001b[36m        test_acc         \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m   0.8557500243186951    \u001b[0m\u001b[35m \u001b[0m│\n",
       "└───────────────────────────┴───────────────────────────┘\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[{'test_acc': 0.8557500243186951}]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainer.test(model=lightning_model, datamodule=dm)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "c904d60a-00b4-48b6-98cb-e6f2a4abd383",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Restoring states from the checkpoint path at logs/my-model/version_0/checkpoints/epoch=8-step=4050.ckpt\n",
      "Loaded model weights from checkpoint at logs/my-model/version_0/checkpoints/epoch=8-step=4050.ckpt\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "16e22c3735ac4921a3d196f2929c8f59",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Testing: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃<span style=\"font-weight: bold\">        Test metric        </span>┃<span style=\"font-weight: bold\">       DataLoader 0        </span>┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│<span style=\"color: #008080; text-decoration-color: #008080\">         test_acc          </span>│<span style=\"color: #800080; text-decoration-color: #800080\">    0.8622499704360962     </span>│\n",
       "└───────────────────────────┴───────────────────────────┘\n",
       "</pre>\n"
      ],
      "text/plain": [
       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃\u001b[1m \u001b[0m\u001b[1m       Test metric       \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m      DataLoader 0       \u001b[0m\u001b[1m \u001b[0m┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│\u001b[36m \u001b[0m\u001b[36m        test_acc         \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m   0.8622499704360962    \u001b[0m\u001b[35m \u001b[0m│\n",
       "└───────────────────────────┴───────────────────────────┘\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[{'test_acc': 0.8622499704360962}]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainer.test(model=lightning_model, datamodule=dm, ckpt_path=\"best\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "41af25d9-e3e6-4c15-9922-e5dbac460c8d",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Restoring states from the checkpoint path at /Users/sebastian/Developer/github_rasbt/machine-learning-notes/templates/modern-early-stop-with-checkpointing/logs/my-model/version_0/checkpoints/last.ckpt\n",
      "Loaded model weights from checkpoint at /Users/sebastian/Developer/github_rasbt/machine-learning-notes/templates/modern-early-stop-with-checkpointing/logs/my-model/version_0/checkpoints/last.ckpt\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4253d4efcb184d6abdce381204535b79",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Testing: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃<span style=\"font-weight: bold\">        Test metric        </span>┃<span style=\"font-weight: bold\">       DataLoader 0        </span>┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│<span style=\"color: #008080; text-decoration-color: #008080\">         test_acc          </span>│<span style=\"color: #800080; text-decoration-color: #800080\">    0.8557500243186951     </span>│\n",
       "└───────────────────────────┴───────────────────────────┘\n",
       "</pre>\n"
      ],
      "text/plain": [
       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃\u001b[1m \u001b[0m\u001b[1m       Test metric       \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m      DataLoader 0       \u001b[0m\u001b[1m \u001b[0m┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│\u001b[36m \u001b[0m\u001b[36m        test_acc         \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m   0.8557500243186951    \u001b[0m\u001b[35m \u001b[0m│\n",
       "└───────────────────────────┴───────────────────────────┘\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[{'test_acc': 0.8557500243186951}]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainer.test(model=lightning_model, datamodule=dm, ckpt_path=\"last\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "d613ffed-71d7-4c19-9e01-a69965c166df",
   "metadata": {},
   "outputs": [],
   "source": [
    "path = trainer.checkpoint_callback.best_model_path\n",
    "\n",
    "lightning_model = LightningModel.load_from_checkpoint(\n",
    "    path, learning_rate=0.1, model=pytorch_model\n",
    ")\n",
    "lightning_model.eval();"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
